package com.bamanker.cloudapi.utils;


import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

import java.util.Properties;

import static com.bamanker.cloudapi.constant.SshConstants.*;

/**
 * <p>
 * SSH连接配置类
 * </p>
 *
 * @author bamanker
 */
public class SSHConnectionUtils {


    //com.jcraft.jsch.Session;
    private Session session;


    /**
     * 关闭ssh连接
     */
    public void closeSsh() {
        session.disconnect();
    }

    /**
     * 创建ssh连接
     */
    public void createSsh() throws JSchException {
        JSch jSch = new JSch();

        //下面这两个设置是在公钥模式需要设置的，非公钥模式不需要进行设置
        //设置known_hosts文件路径，如：~/.ssh/known_hosts（known_hosts中存储是已认证的远程主机host key）
        jSch.setKnownHosts(SSH_PATH_FILE_KNOWN_HOSTS);
        //设置私钥
        jSch.addIdentity(SSH_PATH_FILE_PRIVATE_KEY);

        session = jSch.getSession(SSH_USER, SSH_REMOTE_SERVER, SSH_REMOTE_PORT);

        //如果是密码模式需要设置密码
        //session.setPassword(sshPassword);

        //设置连接过程不校验known_hosts文件中的信息
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);

        //ssh 建立连接！
        session.connect(15000);

        //根据安全策略，您必须通过转发端口进行连接
        //mysql
        session.setPortForwardingL(LOCAL_PORT_MYSQL, MYSQL_REMOTE_SERVER, REMOTE_PORT_MYSQL);
        //redis
        session.setPortForwardingL(LOCAL_PORT_REDIS, REDIS_REMOTE_SERVER, REMOTE_PORT_REDIS);

//        System.out.println("port:"+forwardPort);
    }
}



